ORM是什么?
对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
常见的ORM框架有JPA、MYBATIS、HIBERNATE等。
Spring对ORM的支持
Spring对ORM的支持主要表现在以下方面
一致的异常体系结构
Spring提供了一种方便的方法,把特定于某种技术的异常,如SQLException, 转化为自己的异常,这种异常属于以 DataAccessException为根的异常层次。这些异常封装了原始异常对象,这样就不会有丢失任何错误信息的风险。
一致的DAO抽象支持
为了便于以一种一致的方式使用各种数据访问技术,如JDBC、JDO和Hibernate, Spring提供了一套抽象DAO类扩展。这些抽象类提供了一些方法,通过它们可以 获得与当前使用的数据访问技术相关的数据源和其他配置信息。
JdbcDaoSupport:JDBC数据访问对象的基类。 需要一个DataSource,同时为子类提供 JdbcTemplate。
HibernateDaoSupport: Hibernate数据访问对象的基类。 需要一个SessionFactory,同时为子类提供 HibernateTemplate。也可以选择直接通过 提供一个HibernateTemplate来初始化。
JdoDaoSupport:JDO数据访问对象的基类。 需要设置一个PersistenceManagerFactory, 同时为子类提供JdoTemplate。
- JpaDaoSupport:JPA数据访问对象的基类。 需要一个EntityManagerFactory,同时 为子类提供JpaTemplate。
Spring事务管理
Spring对所有数据访问提供一致的事务管理,通过配置方式,简化事务管理。
本文主要记录Spring和Mybatis的集成
Spring集成Mybatis?
Mybatis介绍
如何集成
简单介绍
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类。 这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 SqlSession 到业务层的 bean 中。 而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。
要使用 MyBatis-Spring 模块,你只需要包含 mybatis-spring-x.x.x.jar 文 件就可以了,并在类路径中加入相关的依赖。如果你使用 Maven,那么在 pom.xml 中加入下面的代码即可:
12345 <dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>x.x.x</version></dependency>
配置
Spring XML配置
1.dataSource
配置数据源,此处我们使用dbcp2数据源
2.SqlSessionFactoryBean
- 用来集成Mybatis,它会创建SqlSessionFactory,SqlSessionFactory需要一个DataSource
configLocation
用来指定Mybatis的配置文件路径及名称mapperLocations
用来指定Mybatis的XML映射文件
新建orm_test.xml
Mybatis XML配置
新建configuration.xml
Mybatis 映射文件配置
DAO接口
1234567891011121314151617181920public interface UserDao {/*** 增加用户* @return*/int addUser(User user);/*** 查询用户* @return*/List<Map<String, Object>> queryUser();/*** 删除用户* @return*/int delUserById(Long id);}映射XML文件
123456789101112131415161718192021<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><!-- 命名空间,指向DAO接口 --><mapper namespace="com.szl.springorm.dao.UserDao" ><!-- 查询用户 --><select id="queryUser" resultType="java.util.Map">select * from t_users</select><!-- 新增用户 --><insert id="addUser" parameterType="com.szl.springorm.model.User">INSERT INTO t_users(name,email)VALUES(#{user.name},#{user.email})</insert><!-- 删除用户 --><delete id="delUserById" parameterType="java.lang.Long">delete from t_users where id=#{id}</delete></mapper>
测试一下
|
|
总结
使用SqlSessionFactory来创建 SqlSession。一旦你获得一个session之后,你可以使用它来执行映射语句,提交或回滚连接,最后,当不再需要它的时候, 你可以关闭session
这样操作依旧繁琐,MyBatis-Spring提供了SqlSessionTemplate,qlSessionTemplate是 MyBatis-Spring 的核心。 这个类负责管理 MyBatis的SqlSession,调用MyBatis的SQL方法, 翻译异常。
SqlSessionTemplate 是线程安全的, 可以被多个 DAO 所共享使用。
使用SqlSessionTemplate
Spring XMl配置
|
|
测试一下
|
|
使用sqlSessionDaoSupport
SqlSessionDaoSupport是一个抽象的支持类, 用来提供 SqlSession 。调用getSqlSession()方法会得到一个 SqlSessionTemplate,之后可以用于执行SQL方法
DAO的实现
使用SqlSessionDaoSupport的方法,需要编写DAO的实现类
|
|
Spring XML配置
|
|
测试一下
|
|
使用MapperFactoryBean动态代理
为了代替手工使用 SqlSessionDaoSupport 或 SqlSessionTemplate 编写数据访问对象 (DAO)的代码,MyBatis-Spring 提供了一个动态代理的实现:MapperFactoryBean
编写DAO
|
|
编写Service实现类
|
|
Spring XML配置
|
|
测试一下
|
|
总结
如果有大量的映射文件,那么就需要在XML中配置大量的MapperFactoryBean,这样XML会非常的臃肿,为此MyBatis-Spring提供了MapperScannerConfigurer, 它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。
配置如下:
basePackage 属性是让你为映射器接口文件设置基本的包路径。 你可以使用分号或逗号 作为分隔符设置多于一个的包路径。每个映射器将会在指定的包路径中递归地被搜索到。
MapperScannerConfigurer 属性不支持使用了 PropertyPlaceholderConfigurer 的属 性替换,因为会在 Spring 其中之前来它加载。但是,你可以使用 PropertiesFactoryBean 和 SpEL 表达式来作为替代。
|
|